#include "stdafx.h"
#include "base/thread/MessageLoopMgr.h"

namespace xBase
{
    CxMessageLoopMgr::CxMessageLoopMgr()
        : m_bInit(FALSE)
    {}

    CxMessageLoopMgr::~CxMessageLoopMgr()
    {}

    BOOL CxMessageLoopMgr::Initialize()
    {
        if (m_bInit)
            return TRUE;

        m_bInit = TRUE;

        return TRUE;
    }

    BOOL CxMessageLoopMgr::SetMessageLoopPointer(DWORD dwThreadID, LONG * pMessageLoop)
    {
        CxAutoLock Guard(m_Locker);

        m_mapMessageLoopPointer[dwThreadID] = pMessageLoop;
        m_mapThreadID[pMessageLoop] = dwThreadID;

        return TRUE;
    }

    BOOL CxMessageLoopMgr::GetMessageLoopPointer(DWORD dwThreadID, LONG ** ppMessageLoop)
    {
        if (!ppMessageLoop)
            return FALSE;

        CxAutoLock Guard(m_Locker);

        if (m_mapMessageLoopPointer.count(dwThreadID) > 0)
        {
            *ppMessageLoop = m_mapMessageLoopPointer[dwThreadID];
        }
        else
        {
            return FALSE;
        }

        return TRUE;
    }

    BOOL CxMessageLoopMgr::GetThreadID(LONG* pMessageLoop, DWORD* pTheadID)
    {
        if (!pTheadID) return FALSE;

        CxAutoLock Guard(m_Locker);

        if (m_mapThreadID.count(pMessageLoop) > 0)
        {
            *pTheadID = m_mapThreadID[pMessageLoop];
            return TRUE;
        }

        return FALSE;
    }

}